﻿using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Security.Principal;
using System.Configuration;
using NMT_WEB.Code;
using NMT_DAL;

namespace NMT_WEB.Frm
{
    /// <remarks>
    /// Autor:  César Murcia - ASINE
    /// email:  cmurcia@gmail.com 
    /// </remarks>
    /// <remarks>
    /// Fecha:  25-11-2011
    /// </remarks>
    /// <summary>
    /// Descripción:    Genera los reportes
    /// </summary>
    public partial class Reporte : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            // Validar permisos
            if (SessionControl.Status == false)
            {
                Response.Redirect("../Frm/Index.aspx");
            }

            this.LblMensaje.Text = string.Empty;

            if (!IsPostBack)
            {
                this.CargarKPIs();
                this.CargarZonas();
                this.ChkTerritorios.Enabled = false;
                this.ChkAllTerritorios.Enabled = false;
            }
        }

        //------------------------------------------------------------
        #region "Métodos Botones"

        /// <summary>
        /// Boton para generar el reporte
        /// </summary>
        protected void BtnSearch_Click1(object sender, EventArgs e)
        {
            int valor = this.ValidarFiltros();

            if (valor == 1)
            {
                this.LblMensaje.Text = "Debe seleccionar por lo menos un KPI";
            }
            else if (valor == 2)
            {
                this.LblMensaje.Text = "Debe seleccionar por lo menos una Zona";
            }
            else if (valor == 3)
            {
                this.LblMensaje.Text = "Debe seleccionar por lo menos un Territorio";
            }
            else
            {
                this.ReportViewer1.LocalReport.Refresh();
            }
        }

        /// <summary>
        /// Comprobar la selección/no selección de todos los KPIs
        /// </summary>
        protected void chkAllKPIs_CheckedChanged(object sender, EventArgs e)
        {
            this.HiddenIDsKPIs.Value = string.Empty;

            if (this.chkAllKPIs.Checked)
            {
                for (int i = 0; i < this.ChkKPIs.Items.Count; i++)
                {
                    this.ChkKPIs.Items[i].Selected = true;
                    this.HiddenIDsKPIs.Value = this.HiddenIDsKPIs.Value + this.ChkKPIs.Items[i].Text + ",";
                }
            }
            else
            {
                for (int i = 0; i < this.ChkKPIs.Items.Count; i++)
                {
                    this.ChkKPIs.Items[i].Selected = false;
                }
                this.HiddenIDsKPIs.Value = string.Empty;
            }
            this.lblTxtKPI.Text = this.HiddenIDsKPIs.Value;
        }

        /// <summary>
        /// Comprobar la selección/no selección de todas las Zonas
        /// </summary>
        protected void ChkAllZonas_CheckedChanged(object sender, EventArgs e)
        {
            this.ChkAllTerritorios.Checked = false;
            this.HiddenIDsZonas.Value = string.Empty;
            this.HiddenIDsTerritorios.Value = string.Empty;

            if (this.ChkAllZonas.Checked)
            {
                for (int i = 0; i < this.ChkZonas.Items.Count; i++)
                {
                    this.ChkZonas.Items[i].Selected = true;
                    this.HiddenIDsZonas.Value = this.HiddenIDsZonas.Value + this.ChkZonas.Items[i].Value + ",";
                }
                this.ChkTerritorios.Enabled = true;
                this.ChkAllTerritorios.Enabled = true;
            }
            else
            {
                for (int i = 0; i < this.ChkZonas.Items.Count; i++)
                {
                    this.ChkZonas.Items[i].Selected = false;
                }
                this.HiddenIDsZonas.Value = string.Empty;
                this.HiddenIDsTerritorios.Value = string.Empty;
                this.ChkTerritorios.Enabled = false;
                this.ChkAllTerritorios.Enabled = false;
            }

            this.CargarTerritorios(this.HiddenIDsZonas.Value);
            this.lblTxtZona.Text = this.HiddenIDsZonas.Value;
            this.lblTxtTerritorio.Text = this.HiddenIDsTerritorios.Value;
        }

        /// <summary>
        /// Comprobar la selección/no selección de todos los Territorios
        /// </summary>
        protected void ChkAllTerritorios_CheckedChanged(object sender, EventArgs e)
        {
            this.HiddenIDsTerritorios.Value = string.Empty;

            if (this.ChkAllTerritorios.Checked)
            {
                for (int i = 0; i < this.ChkTerritorios.Items.Count; i++)
                {
                    this.ChkTerritorios.Items[i].Selected = true;
                    this.HiddenIDsTerritorios.Value = this.HiddenIDsTerritorios.Value + this.ChkTerritorios.Items[i].Text + ",";
                }
            }
            else
            {
                for (int i = 0; i < this.ChkTerritorios.Items.Count; i++)
                {
                    this.ChkTerritorios.Items[i].Selected = false;
                }
                this.HiddenIDsTerritorios.Value = string.Empty;
            }
            this.lblTxtTerritorio.Text = this.HiddenIDsTerritorios.Value;
        }

        /// <summary>
        /// Cargar los Territorios según las Zonas seleccionadas
        /// </summary>
        protected void ChkZonas_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                this.HiddenIDsZonas.Value = string.Empty;
                this.HiddenIDsTerritorios.Value = string.Empty;
                this.ChkAllZonas.Checked = false;
                this.ChkAllTerritorios.Checked = false;

                //--------------------------------------------------------------
                // Guardar los valores seleccionados de territorios
                string[] gTerritorios = new string[this.ChkTerritorios.Items.Count];

                for (int i = 0; i < this.ChkTerritorios.Items.Count; i++)
                {
                    if (this.ChkTerritorios.Items[i].Selected == true)
                    {
                        gTerritorios[i] = this.ChkTerritorios.Items[i].Value;
                    }
                }
                //--------------------------------------------------------------

                for (int i = 0; i < this.ChkZonas.Items.Count; i++)
                {
                    if (this.ChkZonas.Items[i].Selected == true)
                    {
                        this.HiddenIDsZonas.Value = this.HiddenIDsZonas.Value + this.ChkZonas.Items[i].Value + ",";
                    }
                }

                if (string.Equals(this.HiddenIDsZonas.Value, string.Empty))
                {
                    this.HiddenIDsZonas.Value = string.Empty;
                    this.ChkTerritorios.Enabled = false;
                    this.ChkAllTerritorios.Enabled = false;
                }
                else
                {
                    this.ChkTerritorios.Enabled = true;
                    this.ChkAllTerritorios.Enabled = true;
                }

                this.CargarTerritorios(this.HiddenIDsZonas.Value);

                //--------------------------------------------------------------
                // Recuperar territorios seleccionados y cruzar con los actuales
                for (int i = 0; i < this.ChkTerritorios.Items.Count; i++)
                {
                    foreach (string item in gTerritorios)
                    {
                        if (string.Equals(this.ChkTerritorios.Items[i].Value, item))
                        {
                            this.ChkTerritorios.Items[i].Selected = true;
                            break;
                        }
                    }
                }
                for (int i = 0; i < this.ChkTerritorios.Items.Count; i++)
                {
                    if (this.ChkTerritorios.Items[i].Selected == true)
                    {
                        this.HiddenIDsTerritorios.Value = this.HiddenIDsTerritorios.Value + this.ChkTerritorios.Items[i].Text + ",";
                    }
                }
                //--------------------------------------------------------------

                this.lblTxtZona.Text = this.HiddenIDsZonas.Value;
                this.lblTxtTerritorio.Text = this.HiddenIDsTerritorios.Value;
            }
            catch (Exception ex)
            {
                throw new Exception("Error:", ex);
            }
        }

        /// <summary>
        /// Detectar cambios en los Territorios seleccionados
        /// </summary>
        protected void ChkTerritorios_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.HiddenIDsTerritorios.Value = string.Empty;
            this.ChkAllTerritorios.Checked = false;

            for (int i = 0; i < this.ChkTerritorios.Items.Count; i++)
            {
                if (this.ChkTerritorios.Items[i].Selected == true)
                {
                    this.HiddenIDsTerritorios.Value = this.HiddenIDsTerritorios.Value + this.ChkTerritorios.Items[i].Text + ",";
                }
            }
            this.lblTxtTerritorio.Text = this.HiddenIDsTerritorios.Value;
        }

        /// <summary>
        /// Detectar cambios en los KPIs seleccionados
        /// </summary>
        protected void ChkKPIs_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.HiddenIDsKPIs.Value = string.Empty;
            this.chkAllKPIs.Checked = false;

            for (int i = 0; i < this.ChkKPIs.Items.Count; i++)
            {
                if (this.ChkKPIs.Items[i].Selected == true)
                {
                    this.HiddenIDsKPIs.Value = this.HiddenIDsKPIs.Value + this.ChkKPIs.Items[i].Text + ",";
                }
            }
            this.lblTxtKPI.Text = this.HiddenIDsKPIs.Value;
        }

        #endregion
        //------------------------------------------------------------

        //------------------------------------------------------------
        #region "Métodos de Carga"

        private void CargarKPIs()
        {
            this.ChkKPIs.DataTextField = "NOMBRE";
            this.ChkKPIs.DataValueField = "ID";

            Consultas consulta = new Consultas();
            // ID para seleccionar todos los KPI's de tblBasica
            int id = Convert.ToInt32(ConfigurationManager.AppSettings["KPIs"]);
            this.ChkKPIs.DataSource = consulta.SelectTblBasica(id);
            this.ChkKPIs.DataBind();
            consulta = null;
        }

        private void CargarZonas()
        {
            this.ChkZonas.DataTextField = "NOMBRE";
            this.ChkZonas.DataValueField = "ID";

            Consultas consulta = new Consultas();
            this.ChkZonas.DataSource = consulta.SelectZonas();
            this.ChkZonas.DataBind();
            consulta = null;
        }

        private void CargarTerritorios(string ids)
        {
            this.ChkTerritorios.DataTextField = "NOMBRE";
            this.ChkTerritorios.DataValueField = "ID";

            Consultas consulta = new Consultas();
            this.ChkTerritorios.DataSource = consulta.SelectTerritorios(ids);
            this.ChkTerritorios.DataBind();
            consulta = null;
        }

        #endregion
        //------------------------------------------------------------

        //------------------------------------------------------------
        #region "Métodos Validaciones"

        /// <summary>
        /// Preparar campos 
        /// </summary>
        private int ValidarFiltros()
        {
            int valor = 0;

            if (string.Equals(this.txtUsuario.Text, string.Empty))
            {
                this.HiddenUsuario.Value = "0";
            }
            else
            {
                this.HiddenUsuario.Value = this.txtUsuario.Text;
            }

            this.HiddenFechaDe.Value = this.txtFechaDe.SelectedDate.ToShortDateString();
            this.HiddenFechaA.Value = this.txtFechaA.SelectedDate.ToShortDateString();

            if (this.HiddenIDsKPIs.Value == string.Empty)
            {
                valor = 1;
            }

            if (this.HiddenIDsZonas.Value == string.Empty)
            {
                valor = 2;
            }

            if (this.HiddenIDsTerritorios.Value == string.Empty)
            {
                valor = 3;
            }

            return valor;
        }

        #endregion
        //------------------------------------------------------------

    }
}